package com.lmk.ms.common.mvc.service;

import com.lmk.ms.common.dto.db.PageResult;
import com.lmk.ms.common.dto.db.QueryParams;
import com.lmk.ms.common.dto.db.Search;
import com.lmk.ms.common.dto.db.Sort;
import com.lmk.ms.common.dto.es.EsSearchParameter;
import com.lmk.ms.common.dto.es.EsSearchResult;
import com.lmk.ms.common.dto.mvc.Meta;
import com.lmk.ms.common.dto.mvc.ServiceResult;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * ES基础服务
 * @author laomake@hotmail.com
 * @version 1.0
 * @date 2023/3/17
 */
public interface EsBaseService<T, PK extends Serializable> {

    /**
     * 加载模块元素数据
     * @return
     */
    Meta loadMetaInfo();

    /**
     * 根据ID获取实体对象
     * @param id
     * @return
     */
    T getById(PK id);

    /**
     * 传统的分页查询
     * @param queryParams   分页参数
     * @param searchList    查询条件
     * @param sortList      排序条件
     * @return
     */
    PageResult<T> list(QueryParams queryParams, List<Search> searchList, List<Sort> sortList);


    /**
     * ES 数据检索
     * @param parameter
     * @return
     */
    EsSearchResult<T> search(EsSearchParameter parameter);

    /**
     * 创建对象
     * @param entity
     * @return
     */
    ServiceResult create(T entity);

    /**
     * 更新对象
     * @param entity
     * @return
     */
    ServiceResult update(T entity);

    /**
     * 根据ID删除，默认为伪删除。
     * @param id
     * @return
     */
    ServiceResult deleteById(PK id);

    /**
     * 根据ID列表删除，默认为伪删除。
     * @param ids
     * @return
     */
    ServiceResult deleteByIds(Collection<PK> ids);

}